package br.com.rglariguet.pioneer.modelos;

import java.math.BigDecimal;

import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.validation.Valid;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;

import br.com.rglariguet.pioneer.enums.SituacaoPedidoPecaEnum;

@Entity
public class PedidoPeca {
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private long id;
	
	@Min(value=1, message="{quantidade.peca.minima}")
	@NotNull(message="{quantidade.peca.minima}")
	private int quantidade;
	
	@OneToOne
	@Valid
	private Peca peca = new Peca();
	
	@Enumerated(EnumType.STRING)
	private SituacaoPedidoPecaEnum status;
	
	public BigDecimal getPrecoTotal(){
		return peca.getPreco().multiply(BigDecimal.valueOf(quantidade));
	}
	
	public long getId() {
		return id;
	}


	public void setId(long id) {
		this.id = id;
	}


	public SituacaoPedidoPecaEnum getStatus() {
		return status;
	}

	public void setStatus(SituacaoPedidoPecaEnum status) {
		this.status = status;
	}

	public int getQuantidade() {
		return quantidade;
	}

	public void setQuantidade(int quantidade) {
		this.quantidade = quantidade;
	}

	public Peca getPeca() {
		return peca;
	}

	public void setPeca(Peca peca) {
		this.peca = peca;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((peca == null) ? 0 : peca.hashCode());
		result = prime * result + quantidade;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		PedidoPeca other = (PedidoPeca) obj;
		if (peca == null) {
			if (other.peca != null)
				return false;
		} else if (!peca.equals(other.peca))
			return false;
		if (quantidade != other.quantidade)
			return false;
		return true;
	}
	
	
	
	
	
}
